Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
1. `
UNIVERSITA DEGLI STUDI DI TRIESTE
`
FACOLTA DI INGEGNERIA
Corso di laurea specialistica in Ingegneria Informatica
Tesi di laurea in
Complementi di Reti di Calcolatori
Progetto e realizzazione di un sistema
per la caratterizzazione su larga scala
dei codici JavaScript nel Web
LAUREANDA RELATORE
Sara Zambon Chiar.mo Prof. Alberto Bartoli
CORRELATORE
Ing. Eric Medvet
Anno Accademico 2008/2009
10. ELENCO DEI CODICI x
5.25 Argomento offuscato di un eval() . . . . . . . . . . . . . . . . . . . . . . 45
5.26 Argomento offuscato di un unescape() . . . . . . . . . . . . . . . . . . . 46
11. Elenco delle figure
2.1 Finestra visualizzata grazie allo script . . . . . . . . . . . . . . . . . . . . 7
2.2 Inserimento dei dati da inviare all’applicazione . . . . . . . . . . . . . . . 7
2.3 Finestra che si apre a seguito dell’interazione fra utente e applicazione . . 7
2.4 Pagina web composta da tre frame . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Iframe ospitato all’interno di una pagina web . . . . . . . . . . . . . . . . 10
4.1 Home page di Amazon visualizzata tramite un browser . . . . . . . . . . . 22
5.1 Drive-by download a seguito di un attacco browser exploit . . . . . . . . . 40
6.1 Grafici di distribuzione sul numero di script inclusi per pagina . . . . . . . 52
6.2 Grafici di distribuzione cumulativa sulla somma delle dimensioni degli
script per pagina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.3 Grafici di distribuzione cumulativa sulla dimensione degli script in caratteri 53
6.4 Grafici di distribuzione sull’inclusione di script da domini diversi . . . . . 54
6.5 Grafici di distribuzione sulla massima profondit` senza redirezioni per il
a
numero di pagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.6 Grafici di distribuzione sulla massima profondit` con redirezioni per il
a
numero di pagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.7 Grafici di distribuzione sulla massima profondit` senza redirezioni per la
a
percentuale di script calcolata sulla numero assoluto degli stessi . . . . . . 56
6.8 Grafici di distribuzione sulla massima profondit` senza redirezioni per la
a
percentuale di script calcolata sulla dimensione degli stessi . . . . . . . . . 57
6.9 Grafico a barre sull’utilizzo di eval() . . . . . . . . . . . . . . . . . . . . 58
6.10 Grafico a barre sull’utilizzo di eval() con argomento superiore a 140
caratteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.11 Grafico a barre sull’utilizzo di eval() con argomento offuscato . . . . . . 59
6.12 Grafico di distribuzione sull’utilizzo di iframe con dimensioni minori di
3px * 3px per la percentuale di pagine Normal . . . . . . . . . . . . . . . 60
xi
12. ELENCO DELLE FIGURE xii
6.13 Grafico a barre sulla percentuale di script offuscati ricavata tramite il
classificatore MLP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.14 Grafico a barre sulla percentuale di script offuscati ricavata tramite il
classificatore basato sulle soglie . . . . . . . . . . . . . . . . . . . . . . . . 61
6.15 Grafico a barre sull’utilizzo di unescape() . . . . . . . . . . . . . . . . . . 62
6.16 Grafico a barre sull’utilizzo di unescape() con argomento offuscato . . . . 62
6.17 Matrice dei diagrammi di dispersione . . . . . . . . . . . . . . . . . . . . . 63
13. Elenco delle tabelle
5.1 Propriet` e relative condizioni di offuscamento . . . . . . . . . . .
a . . . . 43
5.2 Percentuali di giudizi comuni associate agli script . . . . . . . . . . . . . . 48
5.3 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.4 Soglie sulle features per il secondo bit di offuscamento dello script . . . . 50
xiii
14.
15. Capitolo 1
Introduzione
Il Web ha subito una totale trasformazione, passando da semplice infrastruttura per
l’accesso a dati remoti a complesso sistema contraddistinto da una spiccata interazio-
ne con l’utente. I fruitori di servizi web sono quotidianamente subissati da contenuti
provenienti dai siti visitati. Tali contenuti spesso consistono in codice che dev’essere
eseguito sui sistemi client, operazione che ormai risulta essere essenziale per usufruire
delle funzionalit` di cui i moderni siti sono provvisti.
a
Lo scenario che ne deriva pu` assumere connotati inquietanti in termini di sicurezza
o
informatica. La navigazione fra le pagine di un affermato quotidiano online, solitamente
` percepita dall’utente come un’azione sicura. Ci` che forse ignora il visitatore ` che
e o e
il contenuto ricevuto spesso include una mix di codici provenienti da siti terzi, verso i
quali egli ripone la propria fiducia senza, tuttavia, esserne a conoscenza.
Un’ulteriore insidia per l’inconsapevole utente ` rappresentata da contenuti invisibili,
e
di solito iframe, o comunque sfuggevoli alla vista, i quali, ad esempio, sono in grado di
inoltrare la navigazione verso siti poco raccomandabili se non addirittura diffusori di
software dannoso per il sistema dell’utente.
Un altro aspetto cruciale in questo panorama ` rappresentato dall’offuscamento. I
e
contenuti inviati ai vari client possono comprendere anche frammenti di codice offuscato,
quindi codice deliberamente modificato al fine di renderne ardua l’analisi. Come verr` a
meglio illustrato lungo questo elaborato, alla base dell’offuscamento del codice risiedo-
no obiettivi discrepanti: dalla protezione della paternit` del codice, all’occultazione di
a
contenuti maligni.
Prima di iniziare l’intera trattazione, si propone un esempio che presenta uno scenario
in cui sono presenti tutti gli aspetti appena accennati. L’esempio ` tratto dal Google
e
Technical Report [1] pubblicato nel 2008. All’interno di una pagina web, appartenente
ad un sito di una stazione radio olandese, durante la loro indagine, i ricercatori Google
rilevarono la presenza di un’inserzione pubblicitaria che rimandava ad un sito tedesco.
Tramite una porzione di codice JavaScript, l’utente veniva inoltrato verso un altro sito
pubblicitario negli Stati Uniti che a sua volta reindirizzava la navigazione verso i Paesi
Bassi. Il viaggio dell’utente procedeva fino ad un nuovo sito, sempre nella stessa zona, dal
1
16. 1. Introduzione 2
quale veniva scaricato uno script offuscato che puntava ad un’ulteriore script localizzato
in Austria. Quest’ultimo indirizzava il browser dell’utente, tramite una catena di iframe,
verso il sito finale che provocava lo scaricamento automatico di sofware dannoso sul
sistema client.
L’estrema rilevanza di questi fenomeni nel Web e le enormi dimensioni potenzialmen-
te raggiungibili dai loro effetti in termini di sicurezza, mettono in risalto l’importanza del
nostro lavoro di ricerca che ha avuto come obiettivo la caratterizzazione dei fatti citati.
Nel panorama odierno l’attenzione di cui essi godono ` talmente modesta da sottostimar-
e
ne l’importanza; infatti, ci sono ancora molte domande alle quali non ` stato risposto in
e
maniera adeguata. Ad esempio, non si trovano studi che chiariscano quanto sia diffuso
l’utilizzo del codice offuscato all’interno delle pagine web o che relazione sussista, nel
caso ve ne sia una, fra offuscamento e pagine sospette oppure ancora se l’offuscamento si
riscontri pi` frequentemente nei codici inclusi da altri domini. Una conoscenza lacunosa
u
avvolge anche questioni che sorgono attorno alla diffusione dell’impiego dei contenuti
invisibili precedentemente menzionati oppure di eval, una discussa funzione JavaScript,
potenzialmente in grado di compiere qualsiasi azione e per questo assisa al ruolo di musa
ispiratrice da una folta schiera di criminali informatici.
Per tentare di fornire una risposta a queste domande, abbiamo scelto di condurre le
nostre analisi su un migliaio di pagine collezionate in maniera oculata al fine di ottenere
una plausibile rappresentazione del Web. Da ciascuna pagina abbiamo prelevato script,
frame e iframe contenuti nella pagina stessa o richiamati da fonti esterne, ottenendo di
conseguenza i tre elementi cardine della nostra indagine. Durante lo scaricamento delle
pagine, per ognuno dei tre elementi, oltre al puro codice, si ` tenuto traccia di tutti gli
e
URL attraversati per raggiungere effettivamente quel contenuto.
Una volta completato l’intero download, abbiamo dato avvio al nostro studio estraen-
do da ciascun codice in nostro possesso un set di propriet` relative, ad esempio, alla defi-
a
nizione di funzioni da parte del programmatore, oppure all’utilizzo di particolari costrutti
o funzioni JavaScript. Analizzando e compiendo specifiche elaborazioni sui dati derivati
dallo scaricamento e su quelli estratti dai vari codici, abbiamo cercato di rispondere alle
domande iniziali.
17. Capitolo 2
Script JavaScript frame e iframe
Il crescente aumento di applicazioni online che permettono uno spiccato livello d’in-
terazione con l’utente, come ad esempio blog, forum, chat e sistemi quali Wikipedia,
Youtube, Facebook, Myspace, Twitter, Gmail, Wordpress, Tripadvisor, ha portato con
s` l’inevitabile incremento dell’utilizzo di script, frammenti di codice che consentono
e
concretamente l’interazione.
L’utilizzo di queste tecniche nasconde purtoppo un rovescio della medaglia. Infatti,
se da un lato questi strumenti sono forieri di vantaggi notevoli, i quali hanno dato vita
a una nuova era per il Web, che viene definita 2.0 per marcare il confine tra l’accezione
statica precedente e quella dinamica attuale, dall’altro offrono nuovi mezzi per alcuni
tipi di attacchi informatici.
Da queste considerazioni ha preso spunto la nostra attivit` di ricerca, la cui materia
a
d’indagine ` rappresentata da script JavaScript, frame e iframe.
e
Nella prima parte del capitolo, dopo una panoramica sulla situazione attuale in
termini di sicurezza informatica, si forniscono al lettore alcune definizioni introduttive
all’argomento; di seguito a questa, vengono esposti i quesiti attorno a script JavaScript,
frame e iframe, dai quali ha avuto origine l’intero studio.
2.1 Stato attuale di sicurezza nel Web
Prima di entrare nel vivo di script, frame e iframe, in questa sezione si elencano alcuni
fra i risultati della ricerca “Websense Security Labs, State of Internet Security, Q1-Q2
2009”[9], effettuata dall’azienda Websense1 sullo stato di sicurezza nel web e pubblicata
nel settembre 2009:
1
Websense, Inc.: azienda californiana che opera nel settore delle tecnologie integrate di protezione
Web, email e Dati. L’azienda produce soluzioni che mirano a bloccare i codici malevoli, a impedire la
perdita di informazioni confidenziali e a configurare policy di sicurezza sull’utilizzo di Internet. Ogni
ora Websense R Security LabsTM ThreatSeekerTM Network analizza oltre 40 milioni di siti Web e dieci
milioni di email per identificare contenuti indesiderati e malicious code.
3
18. 2. Script JavaScript frame e iframe 4
• Websense R Security LabsTM ha registrato una crescita del 233% del numero di
siti Internet malicious nel corso degli ultimi sei mesi e una crescita del 671% di
questi nell’ultimo anno;
• nella prima met` del 2009, il 77% dei siti Web con malicious code erano costituiti
a
da siti Internet affidabili che sono stati compromessi. Questa percentuale elevata `e
stata causata in particolare negli ultimi sei mesi da alcuni attacchi quali Gumblar
(vedi sezione 5.5 a pagina 32), Beladen e Nine Ball che hanno compromesso siti
Web considerati altamente affidabili attraverso una serie di attacchi a catena;
• i siti Web 2.0 che consentono contenuti generati dagli utenti finali sono un target
importante per i cybercriminali e gli spammer. La tecnologia Websense DefensioTM
ha consentito ai Websense R Security LabsTM di stabilire che il 95% dei commenti
generati dagli utenti di blog, chat room e bacheche sono spam2 o malicious.
• gli sforzi dei siti Web 2.0 di rendere le proprie pagine sicure sono risultati non
efficaci. La ricerca Websense infatti dimostra che i tool di sicurezza utilizzati da
siti quali YouTube e BlogSpot sono dal 65% al 75% inefficaci nel proteggere gli
utenti Web da contenuti pericolosi e rischi relativi alla sicurezza.
• il 69% di tutte le pagine Internet con contenuti classificati come inappropriati
(contenuti pornografici, gioco d’azzardo, droghe) contenevano almeno un link ma-
licious. Il dato diventa ancora pi` significativo con il 78% dei nuovi siti Internet
u
scoperti nella prima met` del 2009 che contiene almeno un link pericoloso;
a
• Websense R Security LabsTM ha riscontrato che il 37% degli attacchi Web hanno
l’obiettivo di sottrarre dati e informazioni personali fondamentali degli utenti;
• il Web continua ad essere il vettore preferito per il furto di dati. Nella prima met`
a
del 2009 i Websense Security Labs hanno constatato che il 57% degli attacchi che
avevano come obiettivo il furto di dati erano stati condotti attraverso la Rete;
• la convergenza di attacchi misti Web ed email continua a crescere. Secondo
Websense R Security LabsTM , l’85,6% di tutta la posta indesiderata in circolazione
contiene link a siti di spam e/o a siti Web pericolosi;
• solamente a giugno il numero totale di email che contenevano virus ` cresciuta del
e
600% rispetto al mese precedente.
2.2 Script
Uno script lato client ` un programma che pu` accompagnare un documento HTML
e o
oppure essere incorporato direttamente in esso. Il programma viene eseguito sulla mac-
china client quando viene caricato il documento, o in un secondo tempo, per esempio
2
Spam: messaggi indesiderati generalmente a scopi pubblicitari. Con spamming si indica l’invio di
grandi quantit` di questo genere di messaggi solitamente tramite email.
a
19. 5 JavaScript
quando viene attivato un collegamento. Gli script offrono ai progettisti alcuni mezzi per
estendere i documenti HTML in maniera attiva e interattiva.
Le caratteristiche di uno script possono essere cos` elencate:
ı
• gli script possono essere attivati da eventi che coinvolgono il documento, come il
caricamento, lo scaricamento, la focalizzazione di elementi, movimenti del mouse,
e cos` via;
ı
• gli script possono essere collegati a controlli, come i bottoni, per produrre gli
elementi di interfaccia;
• gli script possono processare i dati appena vengono immessi dall’utente all’interno
di form.
2.2.1 L’elemento script
Il tag <script> pone uno script all’interno di un documento. Gli attributi pricipali di
questo tag sono:
• src: attributo che specifica la locazione di uno script esterno al documento, quindi
l’URL3 tramite cui recuperare lo script; se l’attributo non ` impostato, il contenuto
e
dello script ` definito all’interno dell’elemento stesso;
e
• type: attributo che specifica il linguaggio di scripting per il contenuto dell’elemen-
to. Il linguaggio di scripting ` indicato come un tipo di contenuto (per esempio
e
type="text/javascript");
• language: valore che contiene l’identificatore del linguaggio di scripting; poich´ gli
e
identificatori non sono standard, questo attributo ` stato “disapprovato” in favore
e
dell’attributo type.
2.3 JavaScript
JavaScript ` un linguaggio di scripting orientato agli oggetti4 comunemente utilizzato
e
nei siti web.
Fu originariamente sviluppato da Brendan Eich della Netscape Communications con
il nome di Mocha e successivamente di LiveScript, ma in seguito ` stato rinominato
e
JavaScript ed ` stato formalizzato con una sintassi pi` vicina a quella del linguaggio
e u
Java di Sun Microsystems. JavaScript ` stato standardizzato per la prima volta tra il
e
1997 e il 1999 dalla ECMA con il nome ECMAScript. L’ultimo standard, del dicembre
3
URL: Uniform Resource Locator, sequenza di caratteri che identifica univocamente l’indirizzo di una
risorsa in Internet.
4
Programmazione orientata agli oggetti: paradigma di programmazione che prevede di raggruppare
in un’unica entit` (la classe) sia le strutture dati che le procedure che operano su di esse, creando per
a
l’appunto un oggetto software dotato di propriet` (dati) e metodi (procedure) che operano sui dati dello
a
stesso.
20. 2. Script JavaScript frame e iframe 6
`
1999, ` ECMA-262 Edition 3, e corrisponde a JavaScript 1.5. E anche uno standard
e
ISO.
2.3.1 Le caratteristiche di JavaScript
La caratteristica principale di JavaScript ` quella di essere un linguaggio interpretato.
e
Il codice quindi non viene compilato bens` c’` un interprete (in JavaScript lato client
ı e
esso ` incluso nel browser) che esegue riga per riga, a tempo di esecuzione, quanto
e
trascritto nello script. JavaScript presenta quindi tutte le caratteristiche di un normale
linguaggio interpretato con una sintassi analoga a quella di un linguaggio compilato (essa
` relativamente simile a quella del C, del C++ e del Java), quindi con la possibilit` di
e a
utilizzare funzionalit` tipiche dei linguaggi di programmazione ad alto livello (strutture
a
di controllo, cicli, ecc.) e con in pi` anche la potenzialit` di definire strutture pi`
u a u
complesse, vicine a quelle adottate nei normali linguaggi orientati agli oggetti (definizione
di costruttori, creazione di prototipi, istanziazione di oggetti).
Poich´ il linguaggio JavaScript non ha propri costrutti di input o output, un in-
e
terprete JavaScript si basa su un programma ospite in cui ` integrato. Ci sono molti
e
programmi ospiti di questo tipo, di cui quelli relativi al Web sono gli esempi pi` noti.
u
JavaScript, se integrato in un web browser, si collega tramite interfacce DOM5 alle
applicazioni, specialmente al lato server (web server) e al lato client (browser) delle
applicazioni internet. Molti siti web usano la tecnologia JavaScript lato client per creare
potenti applicazioni web dinamiche.
Gli standard DOM imposti dal W3C6 non sempre vengono rispettati dai vari browser:
browser diversi (anche a seconda del loro motore di rendering) espongono diversi oggetti
o metodi allo script, quindi, ` spesso necessario implementare controlli aggiuntivi ad una
e
funzione JavaScript, per garantirne la compatibilit` con ciascun browser. La diversit`
a a
dei DOM dei browser pu` essere aggirata anche attraverso l’uso dell’istruzione eval().
o
Questa funzione nativa valuta una stringa e la esegue come se fosse codice JavaScript.
Un uso principale del JavaScript basato su web ` la scrittura di piccole funzioni
e
integrate nelle pagine HTML che interagiscono con il DOM del browser per compiere
determinate azioni non possibili con il solo HTML statico come ad esempio controllare
i valori nei campi di input, creare finestre pop-up nascondere o visualizzare determinati
elementi.
2.3.1.1 Esempio di codice JavaScript
1 < script type = " text / javascript " >
5
DOM : Document Object Model, standard ufficiale di rappresentazione dei documenti strutturati
come modello orientato agli oggetti.
6
W3C : World Wide Web Consortium, associazione fondata nel 1994 da Tim Berners Lee, padre del
web, al MIT (Massachusetts Institute of Technology), in collaborazione con il CERN (Organizzazione
Europea per la Ricerca Nucleare), con lo scopo di sviluppare tecnologie che garantiscano l’interoperabilit`
a
(specifiche, guidelines, software e applicazioni) per guidare il World Wide Web fino al massimo del suo
potenziale.
21. 7 Frame
2 function show_prompt () {
3 var name = prompt ( " Please enter your name " ," write here " ) ;
4 if ( name != null && name != " " ) {
5 alert ( " Hello " + name + " ! How are you today ? " ) ;
6 }
7 }
8 </ script >
Codice 2.1: Esempio di codice JavaScript
Figura 2.1: Finestra visualizzata grazie allo script
Figura 2.2: Inserimento dei dati da inviare all’applicazione
Figura 2.3: Finestra che si apre a seguito dell’interazione fra utente e applicazione
2.4 Frame
Nelle pagine web si parla di frame quando una pagina ` scomposta in diverse sezioni
e
tra loro indipendenti. Frame ` anche il nome del tag HTML che indica ognuna di tali
e
sezioni.
I frame HTML permettono ai progettisti di presentare i documenti in visualizzazioni
multiple, che possono essere finestre indipendenti o sotto finestre. Le visualizzazioni
22. 2. Script JavaScript frame e iframe 8
multiple offrono ai progettisti un modo per mantenere visibili certe informazioni, mentre
altre visualizzazioni vengono fatte scorrere o rimpiazzate. Per esempio, all’interno della
stessa finestra, un frame pu` visualizzare un banner statico, il secondo un men` di
o u
navigazione, e il terzo il documento principale che pu` essere fatto scorrere verso l’alto
o
o verso il basso, o che pu` essere rimpiazzato navigando tramite il secondo frame (vedi
o
Figura 2.4).
L’obiettivo dei frame ` quello di evitare di dover riscrivere interamente ogni pagina
e
in tutte le sue componenti. Ci` risulta possibile suddividendo la pagina per lasciare
o
intatti, ad esempio, i frame con banner e men` e ricaricare solamente il contenuto del
u
frame centrale, permettendo cos` di gestire una mole di codice nettamente minore.
ı
2.4.1 L’elemento frame
Per poter creare una pagina con i frame viene utilizzato il tag HTML <frameset> che
inizializza la struttura di una pagina con i frame.
All’interno del tag <frameset> trova posto il tag <frame> i cui attributi principali
sono:
• id: identificativo del frame;
• src: stringa che specifica quale pagina deve essere caricata all’interno del frame
stesso.
Gli attributi del tag <frameset> permettono di conferire le dimensioni ai frame e
sono:
• cols: valore che specifica la dimensione delle colonne di ogni frame;
• rows: valore che specifica la dimensione delle righe di ogni frame;
La struttura dei frame non necessita di trovarsi all’interno del tag HTML <body> ma
deve essere inserita dopo il tag di chiusura </head>.
2.4.1.1 Esempio di un documento composto da tre frame
1 < html >
2 < head >
3 < title >A simple frameset document </ title >
4 </ head >
5 < frameset cols = " 20% ,80% " >
6 < frameset rows = " 100 ,200 " >
7 < frame src = " logoUnits . gif " >
8 < frame src = " menu . html " >
9 </ frameset >
10 < frame src = " http :// www . inginf . units . it / Home " >
11 </ frameset >
12 </ html >
Codice 2.2: Esempio di un documento composto da tre frame
23. 9 Inline Frame
Figura 2.4: Pagina web composta da tre frame
2.5 Inline Frame
Iframe sta per Inline frame e permette di inserire un frame anche in una pagina non
strutturata in frame. A tale scopo ` sufficiente servirsi del tag <iframe>.
e
2.5.1 L’elemento iframe
I principali attributi dell’elemento iframe sono:
• width: valore che specifica la larghezza dell’iframe da includere;
• height: valore che specifica l’altezza dell’iframe da includere;
• src: stringa che specifica il documento da caricare all’interno dell’iframe (anche
un url esterno se necessario).
Il tag <iframe>, inoltre, supporta tutti gli attributi del tag <frame>.
L’elemento iframe, permettendo di inserire un frame all’interno di una sezione di
testo, consente di includere un documento HTML dentro un altro.
2.5.1.1 Esempio di un iframe
1 < iframe src = " http :// www . units . it " width = " 820 " height = " 300 " >
</ iframe >
Codice 2.3: Esempio di un iframe
24. 2. Script JavaScript frame e iframe 10
Figura 2.5: Iframe ospitato all’interno di una pagina web
2.6 Quesiti preliminari allo studio
L’idea di intraprendere uno studio con l’obiettivo di realizzare una caratterizzazione di
script JavaScript nel web, nasce in seno alla consapevolezza che sempre pi` spesso pagine
u
web ospitano script, per sfruttare l’interazione dinamica fra client e server.
Questa ricerca ` stata mossa dalla volont` di rispondere a cinque macro quesiti, in
e a
modo tale da soddisfare l’intento di definire l’uso odierno di script JavaScript, frame e
iframe nelle pagine web.
Prima di esporre i quesiti ` doveroso introdurre alcuni concetti presenti in essi. Tali
e
concetti verranno chiariti e analizzati in maniera pi` approfondita nel corso di questo ela-
u
borato, ora viene proposta solamente un’anticipazione volta a garantire la comprensione
delle domande.
Sebbene non si trovi una definizione precisa di offuscamento, si pu` comunque affer-
o
mare che un codice offuscato ` un codice la cui sintassi originale ha subito delle modifiche
e
per essere resa pi` difficile da comprendere. I propositi che spingono un programmatore
u
ad offuscare il proprio codice risultano essere antitetici. Infatti, se da un lato l’offusca-
mento viene utilizzato come mezzo per proteggere la paternit` del codice, dall’altro `
a e
spesso impiegato dagli autori di software maligno per nascondere frammenti di codice
nocivo che, ad esempio, possono dar luogo a browser exploits, in sostanza attacchi infor-
matici che sfruttano un difetto o vulnerabilit` di un sistema operativo o di una parte di
a
software con l’intenzione di alterare le impostazioni del browser all’insaputa dell’utente,
consentendo, ad esempio, il download automatico di componenti dannosi per il sistema
25. 11 Quesiti preliminari allo studio
o la sottrazione fraudolenta di dati privati.
Come verr` meglio illustrato al capitolo 5, le tecniche che mirano ad offuscare il codi-
a
ce fanno frequente uso di espressioni regolari e operazioni su stringhe. Ci` ` reso possibile
oe
dall’utilizzo di alcune funzioni JavaScript native come escape() e unescape() che opera-
no in maniera opposta, codificando e decodificando una stringa, ed eval() che completa
il lavoro iniziato dalle precedenti eseguendo la stringa passatale come argomento.
Gli esperti concordano sul fatto che tutt’oggi ci sia un ricorso abusivo dell’utilizzo
della funzione eval()7 . Solo in una piccola percentuale di casi, infatti, l’utilizzo di
eval() risulta essere indispensabile. Ci` si verifica quando, ad esempio, ` necessario
o e
realizzare complesse espressioni matematiche basate su input dell’utente o quando ` e
necessario serializzare8 lo stato di un oggetto9 all’interno di una stringa affinch` possa
e
essere memorizzato, trasmesso e ricostruito nel seguito.
Nella maggior parte delle situazioni, l’uso di eval() risulta essere scorretto e ten-
denzialmente pericoloso. Infatti, spesso le potenzialit` di questa funzione non risultano
a
necessarie e comportano scarse perfomance del sistema. A tal riguardo si propone una
considerazione. Il fatto che eval() esegua una stringa trattandola come codice, implica
che a tempo di esecuzione venga effettuata una nuova compilazione ed interpretazione
del codice, comportando cos` una notevole perdita in termini di prestazioni.
ı
Per ci` che concerne la pericolosit` di eval(), ` doveroso introdurre lo nozione di
o a e
code injection. Con questo termine si indica l’inserimento all’interno di un’applicazione
(nel nostro caso un’applicazione web) di codice malevolo, eseguito dalla stessa in un
secondo momento.
Molti moderni linguaggi di scripting permettono la dynamic evaluation, che prevede
l’utilizzo di funzioni come eval() per eseguire frammenti di codice ricavati a runtime.
Essa, pensata soprattutto come scorciatoia per il programmatore, pu` rappresentare un
o
grave problema per la sicurezza dell’applicazione nel caso in cui il frammento di codice
eseguito dinamicamente contenga dell’input non opportunamente validato.
Si consideri, a questo proposito, un’applicazione web che faccia uso di eval() per va-
lutare le richieste HTTP10 effettuate tramite il metodo GET. Tale metodo prevede che il
valore del parametro, inserito dall’utente durante una richiesta, venga aggiunto all’URL
preceduto da un ‘?’ (come http://www.website.com/evalpage.php?parameter). Nel caso
in cui l’input non sia vagliato con estrema attenzione prima della valutazione, l’attac-
cante pontenzialmente ` in grado di eseguire sul server qualsiasi comando semplicemente
e
inviando all’applicazione opportuni parametri tramite l’URL.
7
Per un’idea rispetto alla rilevanza dell’argomento, si propone al lettore di interrogare un motore di
ricerca, come Google, con il gioco di parole “eval is evil”.
8
Serializzazione: processo di conversione di un oggetto in un flusso di byte per archiviarlo in memoria,
in un database o in un file oppure per trasmetterlo su una connessione di rete. Lo scopo principale ` di e
salvare lo stato di un oggetto al fine di poterlo ricreare identico tramite il processo inverso che prende il
nome di deserializzazione.
9
Stato di un oggetto: valore di tutti i dati membro dell’oggetto considerato in un certo istante.
10
Richiesta HTTP : insieme di linee inviate al server dal client ad esempio per prelevare una pagina
web. Per una maggiore spiegazione si rimanda al paragrafo 3.2.1 di pagina 15.
26. 2. Script JavaScript frame e iframe 12
2.6.1 I cinque quesiti
Vengono ora elencati in maniera schematica ed essenziale i cinque macro quesiti che
rappresentano le linee guida del nostro studio.
1. Quanto ` diffusa l’inclusione di script da url diversi?
e
2. A che profondit` di inclusione si arriva per includere script?
a
3. Quanto ` diffuso l’utilizzo di eval()?
e
4. Quanto ` diffusa l’inclusione di frame e iframe sospettosamente piccoli?
e
5. Quanto ` diffuso l’utilizzo di tecniche di offuscamento?
e
Nei capitoli successivi verr` illustrato l’iter complessivo adottato (dalla raccolta del
a
dataset, all’individuazione dei parametri per l’analisi da compiere fino all’analisi vera e
propria) per dar risposta a queste domande e ad altre pi` dettagliate ma sempre facenti
u
capo ai cinque cardini menzionati.
In conclusione verranno esposte le deduzioni ricavate a seguito delle osservazioni
condotte sui risultati ottenuti.
27. Capitolo 3
Il dataset
Per rispondere ai cinque macro quesiti esposti nella sottosezione 2.6.1 di pagina 12,
abbiamo deciso di costruire un dataset di pagine che, grosso modo, rispecchiasse lo
scenario attuale del Web.
Nella fattispecie ` stato scelto di popolare il dataset mediante tre categorie di pagine
e
che riproducessero la reale divisione delle pagine nel Web.
A tal scopo si ` stabilito di destinare l’80% del dataset a pagine ritenute normali
e
e auspicabilmente innocue, visitate quotidianamente da un alto tasso di utenti, mentre
poco meno di un quinto del dataset ` stato riservato a pagine presumibilmente maligne
e
dal contenuto sospetto e probabilmente nocivo, ed infine una minima porzione di dataset
` stata popolata con pagine interessanti poich` volte a calcolare le prestazioni del web
e e
browser 1 dell’utente, sottoposto all’elaborazione di particolari script JavaScript.
Si ` deciso di utilizzare tre diverse fonti dalle quali prelevare gli url delle pagine
e
da scaricare e analizzare. A seconda della fonte di provenienza sono state definite tre
tipologie di pagina: Normal, Malicious ed Interesting.
In questo capitolo vengono presentate le fonti impiegate, gli strumenti atti al down-
load delle pagine, l’intervallo di scaricamento e la composizione finale del dataset.
3.1 Le fonti
3.1.1 La fonte per le pagine Normal
La parte pi` consistente del dataset ` formata dalle pagine definite Normal. Si ` deciso
u e e
di far ricadere in questa categoria le home page dei siti web pi` visitati al mondo. Per
u
ottenere questo elenco ci si ` avvalsi della Top Milion Sites List stilata dall’azienda Alexa
e
Internet Inc. e scaricabile dal sito della stessa.
Il campione di pagine Normal ` parte del milione. Nello specifico sono state selezio-
e
nate le prime mille della lista.
1
Web browser : programma che consente all’utente di navigare nel web e quindi di visualizzare e
interagire con testi, immagini e altre informazioni, tipicamente contenute in una pagina web.
13
28. 3. Il dataset 14
Data la facilit` di reperimento di questa tipologia di pagine, il download delle 1000
a
Normal ha richiesto l’arco di una giornata per essere completato. Esso ha avuto successo
nel 83,4% dei casi. In definitiva ` stato possibile compiere l’analisi su 834 pagine Normal.
e
3.1.1.1 Alexa Top Sites
La Alexa Internet Inc. ` un’azienda statunitense, fondata nel 1996, sussidiaria di Ama-
e
zon.com che si occupa di statistiche sul traffico di Internet. Alexa, abbreviazione di
Address Lookup EXperts Authority, ` anche un motore di ricerca con un servizio di web
e
directory [5].
Alexa classifica i siti basandosi sulle visite effettuate dagli utenti della Alexa Toolbar,
per Internet Explorer, e dalle barre degli strumenti integrate in Mozilla e Netscape. Una
volta installata, la toolbar memorizza i dati relativi al traffico del browser e li invia al web
service di Alexa che li immagazzina e analizza al fine di creare le proprie statistiche [4].
A partire dal 1996 si contano oltre 10 milioni di toolbar installate anche se la compagnia
non fornisce il numero esatto [5].
Alexa rende disponibile la lista Top Sites per nazione, lingua o categoria. La lista
classifica il milione di siti maggiormente visitati e ordinati secondo l’Alexa Traffic Rank.
3.1.2 La fonte per le pagine Malicious
Per ci` che concerne le pagine pertinenti la tipologia Malicious, la scelta della fonte `
o e
stata fatta ricadere sulla lista dei siti infettati da malware redatta dal progetto Malware
Domain List e pubblicata sul sito dello stesso: www.malwaredomainlist.com.
Le pagine Malicious sono state segnate da un intervallo di scaricamento dilatato
nel tempo. Questo fatto ` stato reso necessario da due fattori: l’impossibilit` di pos-
e a
sedere un numero congruo di url da scaricare nel medesimo momento e la frequente
difficolt` riscontrata nel download, presumibilmente dovuta alla rimozione delle pagine
a
incriminate.
Durante l’arco di due mesi, quotidianamente ` stata visionata la lista pubblicata sul
e
sito www.malwaredomainlist.com e da quella sono stati estratti i nuovi url presenti.
Si ` scelto di scaricare tutti gli url raccolti nell’elenco ad eccezione di quelli laddove
e
l’estensione della risorsa indicava che l’url in questione si riferiva ad un programma
eseguibile.
3.1.2.1 Malware Domain List
Malware Domain List ` un progetto non a fini commerciali nato nel luglio 2007, grazie
e
all’impegno di alcuni volontari.
Il progetto mantiene aggiornata una lista di domini che vengono scoperti propagare
malware e spyware all’interno del web.
Tra le altre informazioni presenti nella lista, ad ogni dominio sono associati la data e
l’ora d’inserimento nell’elenco, la descrizione del malware diffuso, l’ip e la ragione sociale
con la quale il dominio ` registrato.
e
29. 15 Metodologia di scaricamento delle pagine
Dopo previa iscrizione al progetto, chiunque ha la possibilit` di collaborare all’ag-
a
giornamento della lista di domini maligni. Gli URL notificati dai collaboratori, prima
di essere inseriti nell’elenco, passano al vaglio degli amministratori del progetto. Oltre
a ci` la lista viene mantenuta anche grazie alla cooperazione con altri siti operanti nello
o
stesso campo, come www.malwareurl.com e www.hosts-file.net.
A questo progetto si appoggiano sia ricercatori che internet service provider2 per
smascherare e debellare i siti divulgatori di malware.
3.1.3 La fonte per le pagine Interesting
Con l’appellativo Interesting si vogliono indicare le pagine costituite da JavaScript
benchmark.
Gli strumenti di JavaScript benchmark consentono di testare, verificare e confrontare
le performance JavaScript dei vari web browser. I benchmark racchiudono in s` diverse
e
prove per testare le prestazioni JavaScript del browser in uso: calcoli matematici, velocit`
a
di accesso agli oggetti e alle loro propriet`, utilizzo di regexp, string processing ecc.
a
Per lo studio in esame sono stati scelti i JavaScript benchmark rilasciati dai tre mag-
giori produttori di web browser: V8 Benchmark, Dromaeo e SunSpider rispettivamente
distribuiti da Google, Mozilla e WebKit.
3.2 Metodologia di scaricamento delle pagine
Prima mettere in luce la metodologia di scaricamento adottata, vengono proposte due
serie di definizioni utili al fine della totale comprensione lungo il prosieguo di tutto
l’elaborato.
La prima sequenza presenta alcune nozioni a carattere generale mentre la seconda
espone dei concetti nati in seno al laboratorio di “Reti di Calcolatori” dell’Universit` di
a
Trieste, nel quale ` stata condotta questa ricerca.
e
3.2.1 Definizioni generali
• URL: Uniform Resource Locator ` una sequenza di caratteri che identifica uni-
e
vocamente l’indirizzo di una risorsa in Internet. Esso si compone di cinque parti,
alcune delle quali sono opzionali:
– nome del protocollo: protocollo di rete da utilizzare per l’accesso al server.
I protocolli pi` comuni sono l’HTTP, HTTPS, FTP;
u
– id e password: credenziali per l’accesso alla risorsa;
– nome del server: indirizzo fisico del server su cui risiede la risorsa. Pu`
o
essere costituito da un nome di dominio o da un Indirizzo IP;
2
Internet Service Provider : struttura commerciale o organizzazione che offre ai propri utenti servizi
inerenti Internet come l’accesso alla network stessa e la posta elettronica.
30. 3. Il dataset 16
– numero della porta: numero associato ad un servizio che permette al server
di sapere quale tipo di risorsa ` richiesta;
e
– percorso di accesso alla risorsa: percorso nel file system del server che
identifica la risorsa.
• HTTP Request: insieme di linee inviate dal client al server per prelevare la
risorsa. Essa comprende:
– request line: ` una linea che precisa l’url del documento richiesto, il metodo
e
che deve essere applicato (GET o POST) per ottenere la risorsa e la versione
del protocollo usato;
– header lines: insieme di linee facoltative che permettono di dare delle
informazioni supplementari sulla richiesta;
– entity body: insieme di linee opzionali, separate dalle headers line tramite
una linea vuota, che consentono l’invio di dati al server qualora il metodo
specificato nella request line sia di tipo POST.
• HTTP Response: insieme di linee inviate dal server al client. Essa comprende:
– status line: ` una linea che precisa la versione del protocollo usata, lo stato
e
di trattamento della richiesta attraverso un codice e un testo esplicativo del
codice;
– header lines: insieme di linee facoltative che permettono di dare delle
informazioni supplementari sulla risposta;
– entity body: documento richiesto dal client.
• HTTP Redirection: redirezione verso un nuovo URL associato al documento.
Il nuovo url ` specificato nell’header Location dell’HTTP response.
e
3.2.2 Nostre definizioni
• Risorsa: pagina web visualizzabile tramite web browser. Ogni risorsa ` associata
e
ad un URL. Nel caso la risorsa sia un documento HTML, essa include anche tutte
le informazioni necessarie al browser per la sua visualizzazione (script JavaScript,
frame, iframe, immagini, CSS);
• Snapshot: contenuto di una risorsa di URL u in un dato istante di tempo t; con
contenuto si indicano tutti gli header ottenuti, sia di request che di response, il
content type, la data e la durata del download e l’albero delle ricorrenze, il quale
include:
– l’html della pagina per la quale si ` avviato il download (root html);
e
– l’html ottenibile dagli URL indicati nell’attributo src dei tag iframe o frame
della root html o di altri child html (child html);
31. 17 Dimensione complessiva del dataset
– gli script JavaScript ottenibili dagli URL indicati nell’attributo src dei tag
script della root html o dei child html;
– i css ottenibili dagli URL indicati nell’attributo src dei tag link della root
html o dei child html;
– i css ottenibili dagli URL indicati nella direttiva @import di altri css;
– le immagini ottenibili dagli URL indicati nell’attributo src dei tag img della
root html o dei child html;
– le immagini ottenibili dagli URL specificati con le direttive background e
background-image dei css.
3.2.3 Goldrake
Per dar luogo allo scaricamento ` stato utilizzato il componente downloader di un’istanza
e
di Goldrake, sistema sviluppato presso il laboratorio di “Reti di Calcolatori”del DEEI
dell’Universit` di Trieste, capace di garantire un controllo, periodico e automatizzato,
a
di siti remoti.
Tale strumento, a partire dall’url della risorsa, immagazzina in un database relazio-
nale lo snapshot di quella. Per costruire l’albero delle dipendenze, il programma analizza
in maniera ricorsiva la pagina iniziale e le dipendenze della stessa utilizzando una serie
di sensori.
3.3 Dimensione complessiva del dataset
A conclusione del periodo di scaricamento delle pagine, durato pressoch` due mesi, la
e
composizione del dataset risultava cos` partizionata:
ı
• 834 pagine Normal ;
• 200 pagine Malicious;
• 3 pagine Interesting.
32.
33. Capitolo 4
Metodologia di analisi
Una volta ottenuto il dataset, come spiegato al capitolo 3, si ` proceduto con l’orga-
e
nizzazione e la preparazione dei dati, al fine di poter avviare l’analisi fulcro di questa
tesi.
Poich´ la materia di studio ` rappresentata da script JavaScript, frame e iframe, la
e e
mole di dati legati agli snapshot forniti dal downloader di Goldrake, ` stata sottoposta ad
e
una selezione tesa ad estrapolare il complesso di informazioni inerenti, appunto, script,
frame e iframe.
A questo primo scorporamento ` seguita la riorganizzazione dei dati per porli nel
e
formato pi` consono all’analisi.
u
4.1 Suddivisione del dataset
Dall’albero delle dipendenze di ogni pagina sottoposta a scaricamento, sono stati estra-
polati i dati d’interesse per la nostra indagine. Con tali elementi ` stato popolato un
e
ulteriore database.
La struttura del DB sopracitato, pu` essere descritta semplificandola e riassumendola
o
in due tabelle, una associata agli script JavaScript e una ai frame e agli iframe.
4.1.1 La tabella degli script
Per ogni script JavaScript, collegato in qualche misura a una risorsa, ` stata inserita una
e
riga in una tabella Ts , costituita dai seguenti campi:
• Script URL: url dello script;
• Root page URL: url della pagina per la quale si ` avviato il download;
e
• Root page type: tipologia della pagina (Normal, Malicious o Interesting);
• Script body: codice contenuto nello script;
19
34. 4. Metodologia di analisi 20
• Category: categoria di appartenenza dello script, una fra le seguenti:
– Embedded Script: script identificato da un tag HTML <script> che non
include l’attributo src (un inline script);
– Child Script: script identificato da un tag HTML <script> che include
l’attributo src e che quindi non contiene il codice dello script ma solo il
puntatore all’indirizzo dove quello deve essere prelevato;
– Intrinsic Event: script definito all’interno di un tag HTML come <onload>,
<onclick>, <onsubmit>, <onchange>, <onfocus>, <onmouseover>, e cos` via.
ı
• Locality: campo booleano che, a seconda del valore, conferisce allo script una
delle seguenti accezioni:
– Local: qualora lo Script URL e il Root page URL condividano almeno gli
ultimi due livelli del nome DNS1 ;
– Remote: altrimenti.
• List of HTTP redirection for the script: lista degli URL appartenenti alla
sequenza di download dello script. Tale lista include anche tutte le redirezioni
HTTP e mantiene l’ordine di scaricamento degli URL;
• Total steps: numero degli elementi della lista sopra menzionata;
• Inclusion steps: risultato della sottrazione delle redirezioni HTTP al numero
identificato come Total steps.
Il concetto pu` essere pi` chiaro con l’esempio successivo. Si consideri un Child
o u
Script, quindi uno script il cui codice ` definito all’esterno della pagina web di
e
cui si ` avviato lo scaricamento. La lista degli URL appartenenti alla sequenza
e
di download dello script contiene l’URL della pagina principale e l’URL puntato
dall’attributo src del tag <script>. In questo specifico caso lo script ` caratte-
e
rizzato da Total steps=2 e Inclusion steps=2 perch` durante il percorso non si
e
sono riscontrate redirezioni HTTP. Si consideri ora lo stesso esempio ma nella si-
tuazione in cui la richiesta HTTP inoltrata dal client al server per prelevare tale
script all’URL puntato, riceva una risposta HTTP con il campo Location settato;
nell’header Location ` precisato il nuovo url da cui prelevere lo script richiesto. In
e
questo caso il client subisce una redirezione e lo script risulta esser caratterizzato
da Total steps=3 e Inclusion steps=2.
A seconda delle combinazioni dei campi Category e Locality, gli script sono stati
raggruppati in sei diverse classi. Come verr` meglio illustrato nei capitoli seguenti, per
a
molte analisi ci si ` avvalsi di questa suddivisione.
e
1 `
DNS : Domain Name System, sistema di denominazione del dominio. E un database distribuito che
viene utilizzato per creare una corrispondenza tra indirizzo IP e nome mnemonico assegnato a un nodo.
35. 21 Suddivisione del dataset
4.1.1.1 Lo script: dalla pagina alla tabella
In questo paragrafo si descrive un esempio relativo al download di una pagina web,
www.amazon.com, con successiva estrazione degli script contenuti in essa e popolamento
della tabella Ts .
L’url di cui si avvia lo scaricamento ` la home page del sito www.amazon.com, che,
e
visualizzata tramite un browser, appare all’utente come in Figura 4.1 a pagina 22.
Una volta terminato lo scaricamento, si evince che la pagina ` formata da 32 Embed-
e
ded Script, 7 Child Script e 4 Intrinsic Event.
Nel seguito si elencano i valori dei campi della riga inserita in Ts e relativa al primo
Embedded Script scaricato dalla pagina.
• Script URL: http://www.amazon.com;
• Root page URL: http://www.amazon.com;
• Root page type: Normal;
• Script body:
1 <! --
2 function amz_js_PopWin ( url , name , options ) {
3 var ContextWindow = window . open ( url , name , options ) ;
4 ContextWindow . focus () ;
5 return false ;
6 }
7 // -- >
Codice 4.1: Codice dello script
• Category: Embedded Script;
• Locality: Local;
• List of HTTP redirection for the script:
– http://www.amazon.com;
• Total steps: 1;
• Inclusion steps: 1;
Per maggior chiarezza si riportano anche i dati d’interesse appartenenti al primo
Child Script scaricato dalla pagina.
• Script URL: http://m1.2mdn.net/879366/flashwrite 1 2.js;
• Root page URL: http://www.amazon.com;
• Root page type: Normal;
36. 4. Metodologia di analisi 22
Figura 4.1: Home page di Amazon visualizzata tramite un browser
• Script body:
1 function dclkToObject ( id ) {
2 if ( document . layers ) {
3 return ( document . layers [ id ]) ? eval ( document . layers [ id ]) :
null ;
4 }
5 else if ( document . all && ! document . getElementById ) {
6 return ( eval ( " window . " + id ) ) ? eval ( " window . " + id ) : null ;
7 }
8 else if ( document . getElementById && document . body . style ) {
9 return ( document . getElementById ( id ) ) ? eval ( document .
getElementById ( id ) ) : null ;
10 }
11 }
12
13 function dclkFlashWrite ( string ) {
14 document . write ( string ) ;
15 }
16
17 function d cl kF la shI nn er HT ML ( htmlElementId , code ) {
18 var x = dclkToObject ( htmlElementId ) ;
19 if ( x ) {
20 if ( document . getElementById || document . all ) {
21 x . innerHTML = ’ ’;
22 x . innerHTML = code ;
37. 23 Suddivisione del dataset
23 }
24 else if ( document . layers ) {
25 x . document . open () ;
26 x . document . write ( code ) ;
27 x . document . close () ;
28 }
29 }
30 }
Codice 4.2: Codice dello script
• Category: Child Script;
• Locality: Remote;
• List of HTTP redirection for the script:
– http://www.amazon.com
– http://ad.doubleclick.net/adi/amzn.us.gw.btf;sz=300x250;bn=507846;u=7689...
;ord=00F0WDTCRNB34BE99MBC;s=32;s=m4;s=m1;z=1;tile=3?
– http://ad.doubleclick.net/adi/N624.160337.0447968804521/B3948491;sz=300x250;
click=http://ad.doubleclick.net/click%3Bh=v8/38c1/3/0/%2a/a%3B132905229%
3B0-0%3B0%3B18273354%3B4307-300/250%3B33661023/33678901/1%3Bu%
3D768289f015614a40a75c747a2f702ea3%3B%7Eaopt%3D2/1/4/2%3B%7Esscs%
3D%3f;ord=2385959?
– http://m1.2mdn.net/879366/flashwrite 1 2.js
• Total steps: 4;
• Inclusion steps: 4;
4.1.2 La tabella dei frame e degli iframe
Analogamente alla tabella Ts , ` stata popolata anche una tabella Ti relativa ai frame
e
e agli iframe reperiti analizzando i tag HTML <frame> e <iframe> riscontrati nelle
sequenza di download di ogni risorsa.
Di seguito viene presentata la descrizione dei campi della tabella Ti :
• Iframe URL: url del frame o dell’iframe;
• Root page URL: url della pagina per la quale si ` avviato il download;
e
• Root page type: tipologia della pagina (Normal, Malicious o Interesting);
• Iframe body: codice contenuto fra le coppie di tag HTML <frame>. . . e . . . </frame>
o <iframe>. . . e . . . </iframe>;
• Enclosing: tipo di inclusione del frame o dell’iframe, una fra le seguenti:
38. 4. Metodologia di analisi 24
– HTML Embedded: frame o iframe incluso all’interno del codice HTML di
una pagina;
– Script Embedded: frame o iframe incluso all’interno del codice JavaScript
di uno script.
• Locality: campo booleano che, a seconda del valore, conferisce al frame o all’ifra-
me una delle seguenti accezioni:
– Local: qualora l’Iframe URL e il Root page URL condividano almeno gli
ultimi due livelli del nome DNS;
– Remote: altrimenti.
• List of HTTP redirection for the iframe: lista degli URL appartenenti alla
sequenza di download del frame o dell’iframe. Tale lista include anche tutte le
redirezioni HTTP e mantiene l’ordine di scaricamento degli URL;
• Total steps: numero degli elementi della lista sopra menzionata;
• Inclusion steps: risultato della sottrazione delle redirezioni HTTP al numero
identificato come Total steps.
Nelle nostre analisi i frame e gli iframe sono stati classificati in base ai quattro gruppi
scaturiti dalle combinazioni dei campi Enclosing e Locality.
4.1.2.1 L’iframe: dalla pagina alla tabella
Sempre a seguito del download della pagina www.amazon.com (Figura 4.1), la tabella Ti
` stata popolata con cinque iframe: 3 del tipo Embedded e 2 del tipo Script Embedded.
e
Nel seguito si elencano i valori dei campi della riga inserita in Ti e relativa al primo
iframe HTML Embedded della pagina.
• Iframe URL: http://ad.doubleclick.net/adi/amzn.us.gw.btf;sz=300x250;bn=507846;
u=768289f015614a40a75c747a2f702ea3;ord=00F0WDTCRNB34BE99MBC;s=32;s=m4;
s=m1;z=1;tile=3?;
• Root page URL: http://www.amazon.com;
• Root page type: Normal;
• Iframe body:
1 < iframe xmlns = " http :// www . w3 . org /1999/ xhtml " bordercolor = "
#000000 " frameborder = " 0 " height = " 250 " hspace = " 0 "
marginheight = " 0 " marginwidth = " 0 " scrolling = " no " src = " http
:// ad . doubleclick . net / adi / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 /
B3948491 ; sz =300 x250 ; click = http :// ad . doubleclick . net / click
%3 Bh = v8 /38 c1 /3/0/%2 a / a %3 B132905229 %3 B0 -0%3 B0 %3 B18273354 %3
B4307 -300/250%3 B33661023 /33678901/1%3 Bu %3
39. 25 Analisi sugli script e sugli iframe
D 7 6 8 2 8 9 f 0 1 5 6 1 4 a 4 0 a 7 5 c 7 4 7 a 2 f 7 0 2 e a 3 %3 B %7 Eaopt %3 D2 /1/4/2%3 B %7
Esscs %3 D %3 f ; ord =2385959? " vspace = " 0 " width = " 300 " > & lt ;
SCRIPT language = ’ JavaScript1 .1 ’ SRC = " http :// ad . doubleclick
. net / adj / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; abr =! ie ; sz =300
x250 ; ord =2385959? " & gt ; & lt ;/ SCRIPT & gt ; & lt ; NOSCRIPT & gt ; &
lt ; A HREF = " http :// ad . doubleclick . net / jump / N624
. 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; abr =! ie4 ; abr =! ie5 ; sz =300
x250 ; ord =2385959? " & gt ; & lt ; IMG SRC = " http :// ad . doubleclick .
net / ad / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; abr =! ie4 ; abr =!
ie5 ; sz =300 x250 ; ord =2385959? " BORDER =0 WIDTH =300 HEIGHT =250
ALT = " " Click Here " " & gt ;& lt ;/ A & gt ; & lt ;/ NOSCRIPT & gt ; </
iframe >
Codice 4.3: Codice dell’iframe
• Enclosing: HTML Embedded;
• Locality: Remote;
• List of HTTP redirection for the iframe:
– http://www.amazon.com;
– http://ad.doubleclick.net/adi/amzn.us.gw.btf;sz=300x250;bn=507846;u=7689...
;ord=00F0WDTCRNB34BE99MBC;s=32;s=m4;s=m1;z=1;tile=3?;
• Total steps: 2;
• Inclusion steps: 2;
4.2 Analisi sugli script e sugli iframe
Una volta ottenute le informazioni sulle “generalit`” di script, frame e iframe, si ` deciso
a e
di analizzarne il contenuto e quindi scendere a livello del codice per ricavarne gli apetti
salienti e poter soddisfare l’intento di fornirne una caratterizzazione complessiva.
A tal scopo sono stati definiti due set di propriet` da estrarre e da misurare, il primo
a
peculiare per gli script, il secondo per i frame e gli iframe.
4.2.1 Propriet` estratte dagli script
a
L’obiettivo prefisso nella definizione delle propriet`, si individua nell’esigenza di svisce-
a
rare il singolo script al fine di esaminarne le componenti, quali le funzioni definite dal
programmatore, le funzioni native JavaScript come, ad esempio, eval() e unescape(),
i document.write(), gli iframe e le variabili.
Nel seguito viene delineato l’elenco delle propriet` estratte per ogni script.
a
• Function name: nome di ogni funzione definita nello script;
40. 4. Metodologia di analisi 26
• Document.write: argomento di ogni invocazione di tipo document.write();
• Iframe: argomento racchiuso fra i tag HTML <iframe>. . . e . . . </iframe>;
• Variable name: nome di ogni variabile definita nello script;
• Variable content: contenuto di ogni variabile definita nello script;
• Long string: contenuto di ogni stringa costante di dimensione superiore ai 140
caratteri definita nello script;
• Eval: argomento di ogni invocazione di tipo eval();
• Unescape: argomento di ogni invocazione di tipo unescape();
• Decode: argomento di ogni invocazione di tipo decode();
• Onerror: argomento di ogni invocazione di tipo onerror();
• Exec: argomento di ogni invocazione di tipo exec();
• String.fromCharCode: argomento di ogni invocazione di tipo String.fromCharCode();
• String.charCodeAt: argomento di ogni invocazione di tipo String.charCodeAt();
• Math.random: argomento di ogni invocazione di tipo Math.random();
4.2.2 Propriet` estratte dai frame e dagli iframe
a
Per ci` che concerne i frame i gli iframe le propriet` estratte si riassumono nelle dimen-
o a
sioni degli stessi:
• width: valore che specifica la larghezza del frame o dell’iframe;
• height: valore che specifica l’altezza del frame o dell’iframe;
Le propriet` elencate in questi due paragrafi si pongono come nucleo fondante per
a
le nostre analisi. Esse sono state analizzate sotto vari aspetti a seconda delle esigenze:
talvolta ne ` stato considerato il numero di occorrenze, talatra ` stato preso in considera-
e e
zione il valore insito nella propriet` o, ancora, ci si ` soffermati sul risultato di particolari
a e
elaborazioni effettuate su quei valori.
41. Capitolo 5
Offuscamento
Lungo questo capitolo viene trattato un tema complicato e caratterizzato da aspetti su
cui attualmente non ` ancora stata fatta completa chiarezza: l’offuscamento. Codesto
e
argomento ha impiegato una parte consistente di tempo dedicato a questa ricerca.
Il capitolo ` essenzialmente suddiviso in quattro sezioni.
e
Nella prima viene esposto il concetto di offuscamento cos` come trattato in lettera-
ı
tura. Vengono elencate le motivazioni alla base dell’offuscamento del codice e vengono
forniti alcuni esempi.
Quindi il focus del capitolo passa nello specifico all’offuscamento come tecnica per ce-
lare contenuti maligni. In questa parte viene definito e analizzato anche l’uso di eval().
Infatti, il concetto di offuscamento ` sovente accumunato a tale funzione JavaScript.
e
Nella terza parte del capitolo viene dato spazio al tema degli iframe sospettosamente
“piccoli” se non adirittura invisibili. In tale sezione viene spiegato il rapporto che sussiste
fra questa tipologia di iframe e l’offuscamento; al lettore risulter` quindi chiara la scelta
a
di inserire l’argomento all’interno di questo capitolo.
Infine, viene esposto il nostro approccio al problema. Viene illustrata la metodologia
di analisi tesa alla caratterizzazione dell’offuscamento degli script presenti nel nostro
dataset (quasi 54 mila).
L’obiettivo di questa fase dello studio ` consistito nel fornire degli strumenti per
e
poter rispondere agli ultimi tre macroquesiti introdotti al paragrafo 2.6.1 di pagina 12.
5.1 Definizione di offuscamento
Come gi` anticipato nella sezione 2.6 a pagina 10, nonostante non esista una definizione
a
precisa del concetto di offuscamento, si pu` asserire che un codice offuscato ` un codice
o e
sorgente1 o macchina2 che ` stato intenzionalmente modificato per essere reso difficil-
e
1
Codice sorgente: insieme di istruzioni scritte dal programmatore per realizzare un programma.
2
Codice macchina: insieme di istruzioni binarie direttamente eseguibili dalla macchina. Se il codice
sorgente ` scritto con un linguaggio ad alto livello, per essere eseguito dev’essere tradotto in codice
e
macchina.
27
42. 5. Offuscamento 28
mente comprensibile sia da un analista umano che da un programma la cui finalit` sia a
quella di effettuare il reverse engineering 3 , ossia di impedire di risalire all’algoritmo alla
base del codice.
Gli scopi che spingono un programmatore ad offuscare il proprio codice sono para-
dossalmente opposti. Da un lato, il ricorso alla code obfuscation ` volto alla protezione
e
del sorgente, quindi prevenire il reverse engineering, in modo tale da impedirne il plagio
e la contraffazione. D’altro canto, invece, l’offuscamento pu` essere impiegato per celare
o
codice maligno con finalit` biasimevoli.
a
5.2 Programmi atti all’offuscamento
I programmi che trasformano il codice “human-readable” in codice offuscato si defini-
scono obfuscators. Essi differiscono a seconda del linguaggio trattato e delle tecniche
utilizzate per il loro scopo.
Inoltre, questi programmi vengono classificati in base a tre parametri:
• Potenza: indica il grado di offuscamento raggiunto dal codice in seguito alla
trasformazione;
• Resilienza: indica il grado di resistenza del codice offuscato contro un attacco da
parte di uno strumento che opera la trasformazione inversa;
• Costo: indica l’overhead4 aggiunto all’applicazione originale.
5.3 Programmi per offuscare codice JavaScript
Compiendo una rapida ricerca in rete, si pu` osservare che esiste un numero ingen-
o
te di programmi appartenenti alla categoria JavaScript obfuscator. Essi provvedono
all’offuscamento automatico di codice JavaScript.
Solitamente questi programmi intervengono sul codice in esame compiendo tutte o
quasi le seguenti operazioni:
• eliminazione dei commenti;
• eliminazione degli spazi inutili;
• rinomina delle funzioni;
• rinomina dei parametri;
3
Reverse engineering: processo mediante il quale si cerca di scoprire i principi sui quali si basa
un dispositivo, un software o un qualsiasi prodotto finito attraverso l’analisi della sua struttura, delle
funzionalit` e delle operazioni che questo svolge.
a
4
Overhead : con questo termine si definiscono le risorse accessorie, richieste in sovrappi` rispetto
u
a quelle strettamente necessarie, per ottenere un determinato scopo in seguito all’introduzione di un
metodo o di un processo pi` evoluto o pi` generale.
u u
43. 29 Programmi per offuscare codice JavaScript
• rinomina delle variabili;
• rinomina dei metodi;
• accorpamento del codice in un’unica riga;
• compressione del codice.
5.3.1 Primo esempio di funzionamento di un JavaScript obfuscator
Il primo esempio, volto a chiarire il funzionamento di un JavaScript obfuscator, ` preso
e
dal sito di un programma che compie la menzionata trasformazione sul codice [7].
1 function foo ( arg1 )
2 {
3 var myVar1 = " some string " ; // first comment
4 var intVar = 24*3600; // second comment
5 /* here is
6 a long
7 multi - line comment */
8 document . write ( " vars are : " + myVar1 + " " + intVar + " " + arg1 ) ;
9 }
Codice 5.1: Frammento di codice JavaScript da offuscare
Quando il JavaScript obfuscator in questione effettua il parsing del codice, vengono
eliminati gli spazi, i commenti e gli accapo. Inoltre, i nomi di funzioni, i parametri e
le varibili vengono rimpiazzati con stringhe composte casualmente, ai valori degli inte-
ri subentrano equazioni complesse, mentre le stringhe da visualizzare a schermo sono
sostituite dai loro valori esadecimali.
Il risultato ottenuto ` il seguente:
e
1 function z001c775808 ( z3833986e2c ) { var z0d8bd8ba25 = " x73 x6f x6d
x65 x20 x73 x74 x72 x69 x6e x67 " ; var z0ed9bcbcc2 =(0 x90b +785 -0
xc04 ) *(0 x1136 +6437 -0 x1c4b ) ; document . write ( " x76 x61 x72 x73 x20
x61 x72 x65 x3a " + z0d8bd8ba25 + " x20 " + z0ed9bcbcc2 + " x20 " +
z3833986e2c ) ;}
Codice 5.2: Stesso frammento di codice JavaScript dopo l’offuscamento
Si elencano le sostituzioni apportate nelle tre categorie:
• nomi di funzioni, parametri e variabili definiti dall’utente:
– foo ` sostituito con z001c775808;
e
– arg1 ` sostituito con z3833986e2c;
e
– myvar1 ` sostituito con z0d8bd8ba25;
e
– intvar ` sostituito con z0ed9bcbcc2;
e
• valori di numeri interi:
44. 5. Offuscamento 30
– 20 ` sostituito con (0x90b+785-0xc04);
e
– 3600 ` sostituito con (0x1136+6437-0x1c4b);
e
• stringhe da visualizzare a schermo:
– vars are ` sostituita con x76x61x72x73x20x61x72x65x3a;
e
– gli spazi sono sostituiti con x20.
5.3.2 Secondo esempio di funzionamento di un JavaScript obfuscator
In questo paragrafo si riporta un ulteriore esempio di codifica del codice operato da un
altro JavaScript obfuscator (l’esempio ` tratto dal sito del programma stesso [8]).
e
Il seguente codice javascript calcola lo stipendio di ogni impiegato presente nella lista
“aEmployees” di oggetti “Employees”.
Questo esempio di offuscamento rientra nella prima tipologia di utilizzi citati nella
sezione 5.1, infatti, gli scopi principali sono la protezione e la compressione del codice.
1 function CalculateSalary ( aEmployees )
2 {
3 var nEmpIndex = 0;
4 while ( nEmpIndex < aEmployees . length )
5 {
6 var oEmployee = aEmployees [ nEmpIndex ];
7 oEmployee . fSalary = C a l cu l a te B a se S a la r y ( oEmployee . nType ,
8 oEmployee .
nWorkingHours ) ;
9 if ( oEmployee . bBonusAllowed == true )
10 {
11 oEmployee . fBonus = C a l c u l a t e B o n u s S a l a r y ( oEmployee . nType ,
12 oEmployee .
nWorkingHours ,
13 oEmployee . fSalary
);
14 }
15 else
16 {
17 oEmployee . fBonus = 0;
18 }
19 oEmployee . sSalaryColor = GetSalaryColor ( oEmployee . fSalary +
20 oEmployee . fBonus ) ;
21 nEmpIndex ++;
22 }
23 }
Codice 5.3: Frammento di codice JavaScript da offuscare
Dando in pasto questo codice al JavaScript obfuscator, ci` che ne risulta ` il successivo
o e
frammento:
45. 31 JavaScript come veicolo di contenuti maligni
1 function c ( g ) { var m =0; while ( m <g . length ) { var r = g [ m ]; r . l = d ( r .n , r . o ) ;
if ( r . j == true ) { r . k = e ( r .n , r .o , r . l ) ;} else { r . k =0;} r . t = f ( r . l + r . k ) ; m
++;}}
Codice 5.4: Stesso frammento di codice JavaScript dopo l’offuscamento
5.4 JavaScript come veicolo di contenuti maligni
Se, come detto precedentemente, la presenza di una porzione di codice offuscato non
implica che quel codice sia necessariamente infetto, ` comunque ragionevole ritenere che
e
chi scriva del codice con contenuto maligno sia portato ad offuscarlo.
Per questo motivo, nel seguito, si delinea un elenco di attacchi che possono essere
effettuati anche tramite codice JavaScript.
• Denial of Service: l’attacco DoS cerca di portare il funzionamento di un server
al limite delle prestazioni, fino a renderlo non pi` in grado di erogare il servizio.
u
Script JavaScript possono essere utilizzati dall’attaccante, per spedire una mole
cos` ingente di richieste al server tale da metterlo fuori uso;
ı
• Cross-Site-Scripting: l’attacco definito anche XSS, appartiene alla tipologia
injection, si tratta, quindi, di immissione di codice arbitrario in input alle pagine
web.
Il cross-site scripting consente di accedere a informazioni sensibili, rubare dati di
sessione degli utenti, compromettere i browser web che essi utilizzano o, ancor
peggio, l’integrit` del sistema su cui tali browser stanno eseguendo.
a
Gli attacchi alle vulnerabilit` XSS hanno effetti dirompenti per i siti con un ele-
a
vato numero di utenti, dato che ` sufficiente una sola compromissione per colpire
e
chiunque visiti la stessa pagina.
Il primo passo di un attaccante sta nell’upload del proprio script malevolo all’in-
terno del sito web designato ad ospitarlo. Il codice malevolo pu` essere inserito nel
o
sito:
– deliberamente poich´ l’attaccante ne ` il proprietario;
e e
– sfruttando una vulnerabilit` del sistema operativo, o di livello Network o di
a
una delle zone del sito stesso.
• Phishing: questo attacco mira ad ottenere l’accesso a informazioni personali o
riservate tramite messaggi di posta elettronica che imitano grafica e logo dei siti
istituzionali. L’email maligna indirizza il destinatario verso un sito web fasullo
(apparentemente identico a quello fidato) che esorta la vittima a fornire informa-
zioni riservate come codice fiscale, numero di conto corrente, numero di carta di
credito e codici di identificazione.